package message_queue

import (
	"encoding/json"
	"gq_volunteer_platform/bean"
	"gq_volunteer_platform/model/message_queue"
)

// 添加消息到队列
// data 对应 微信小程序模板 data 结构
func MessageQueueAdd(openid string, template_id string, paramData any, page string) (err error) {

	var req struct {
		Touser            string `json:"touser"`
		Template_id       string `json:"template_id"`
		Page              string `json:"page"`
		Data              any    `json:"data"`
		Miniprogram_state string `json:"miniprogram_state"`
		Lang              string `json:"lang"`
	}

	req.Touser = openid // openid
	req.Template_id = template_id
	req.Page = page                  // 点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转
	req.Miniprogram_state = "trial"  // 跳转小程序类型：developer为开发版；trial为体验版；formal为正式版；默认为正式版
	req.Miniprogram_state = "formal" // 跳转小程序类型：developer为开发版；trial为体验版；formal为正式版；默认为正式版

	req.Lang = "zh_CN"

	req.Data = paramData

	jsonValue, err := json.Marshal(req)
	if err != nil {
		return err
	}

	// 加入通知队列
	var messageQueue message_queue.MessageQueue
	messageQueue.Content = string(jsonValue)
	messageQueue.Model = "微信小程序通知"
	messageQueue.Result = ""

	if err := bean.MysqlDb.Create(&messageQueue).Error; err != nil {
		bean.Log.Error(err)
		return err
	}

	return nil
}

// 消息队列处理 通用模板消息模板封装
// openid
// page 跳转页面
// project 申请项目
// time 申请时间
// result 审核结果
func MessageQueueAddT1(openid string, page string, applyProject string, applyTime string, applyTesult string) (err error) {
	var template_id = "ULm-1fgU496yD9my2r-Ip_T9xJrmr4vVd5PGunf8oVs"
	// var page = "pages/index/index"

	var paramData struct {
		Thing2 struct {
			Value string `json:"value"` //申请项目
		} `json:"thing2"`
		Time3 struct {
			Value string `json:"value"` //申请时间
		} `json:"time3"`
		Thing4 struct {
			Value string `json:"value"` //审核结果
		} `json:"thing4"`
	}
	// 限制说明 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-message-management/subscribe-message/sendMessage.html
	// thing.DATA	事物	20个以内字符	可汉字、数字、字母或符号组合

	paramData.Thing2.Value = FirstN(applyProject, 17)
	paramData.Time3.Value = applyTime
	paramData.Thing4.Value = FirstN(applyTesult, 17)

	// var Openid = "oYEyo7dzIV9ow42SVadxY5W8dSt0"

	if err := MessageQueueAdd(openid, template_id, paramData, page); err != nil {
		return err
	}

	return nil
}

// 截取前n个字符
func FirstN(str string, n int) string {
	rs := []rune(str)
	if len(rs) > n {
		return string(rs[:n]) + "..."
	}
	return str
}

// 截取后n个字符
func LastN(str string, n int) string {
	rs := []rune(str)
	if len(rs) > n {
		return string(rs[len(rs)-n:])
	}
	return str
}
